package test.YTool;

public class BaseDao {
	/**
	 * 更新时忽略某些字段
	 * @param obj
	 * @param tableName
	 * @param idColumnArray 作为定位用(where语句中)的数据库中的字段名（注意不是obj中的字段）
	 * @param ignoreColumns obj 中要忽略的字段名
	 * @return 更新条数
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
//	protected <T> int updateIgnore(T obj, String tableName, String idColumnArray[], String ignoreColumns[])
//			throws IllegalArgumentException, IllegalAccessException {
//		List<String> idNameList = Arrays.asList(idColumnArray);
//		if(CollectionUtil.isEmpty(idNameList))
//			throw new RuntimeException("updateIgnore no main key");
//		// 由于obtainColumn算出来的数据库字段名一定是小写，所以过滤字段也要是小写
//		String ignoreColumnsLower[] = new String[ignoreColumns.length];
//		for (int i=0; i<ignoreColumns.length; i++) {
//			ignoreColumnsLower[i] = ignoreColumns[i].toLowerCase();
//		}
//		Set<String> ignoreColumnSet = getColumnSet(ignoreColumnsLower);
//		Class<?> clazz = obj.getClass();
//		List<ColumnMapper> columnMapperList = mapper.getColumnMapper(clazz);
//
//		StringBuilder updateSQL = new StringBuilder();
//		updateSQL.append("UPDATE");
//		updateSQL.append(" ");
//		updateSQL.append(tableName);
//		updateSQL.append(" ");
//		updateSQL.append("SET");
//		updateSQL.append(" ");
//
//		Map<String, String> mapColumn = new HashMap<String, String>();
//		for (int index = 0; index < columnMapperList.size(); index++) {
//			ColumnMapper mapper = columnMapperList.get(index);
//			if (idNameList.contains(mapper.getColumn())) {
//				mapColumn.put(mapper.getColumn(), mapper.getFiled());
//				continue;
//			}
//			if (ignoreColumnSet.contains(mapper.getColumn())) {
//				logger.debug("该column[{}]不在updateIgnore计划里面", mapper.getColumn());
//				continue;
//			}
//			updateSQL.append(mapper.getColumn());
//			updateSQL.append("=");
//			updateSQL.append(":").append(mapper.getFiled());
//			updateSQL.append(",");
//		}
//		String updateSqlStr = updateSQL.toString();
//		updateSqlStr = updateSqlStr.trim().substring(0, updateSqlStr.length() - 1);
//		updateSQL = new StringBuilder(updateSqlStr);
//		updateSQL.append(" ");
//
//		
//		updateSQL.append("WHERE ");
//		boolean isFirst = true;
//		for(Map.Entry<String, String> id: mapColumn.entrySet()){
//			if( !isFirst ) updateSQL.append(" AND ");
//			updateSQL.append(id.getKey());
//			updateSQL.append("=");
//			updateSQL.append(":").append(id.getValue());
//			isFirst = false;
//		}
//
//		Map<String, Object> paramMap = new HashMap<String, Object>();
//		Field[] fields = clazz.getDeclaredFields();
//		for (Field field : fields) {
//			String fieldName = field.getName();
//			if (!"serialVersionUID".equalsIgnoreCase(fieldName)) {
//				field.setAccessible(true);
//				Object val = field.get(obj);
//				paramMap.put(field.getName(), val);
//				field.setAccessible(false);
//			}
//		}
//
//		int rowNum = jdbcTemplate.update(updateSQL.toString(), paramMap);
//		return rowNum;
//	}
}
